#include "encoding.h"

#define LREG ld
#define SREG sd
#define LFREG flw
#define SFREG fsw
#define REGBYTES 8

.section .text.riscvfunc,"ax",@progbits
.globl regs_backup
regs_backup:
	SREG x1,1 * REGBYTES(a0)
	SREG x2,2 * REGBYTES(a0)
	SREG x3,3 * REGBYTES(a0)
	SREG x4,4 * REGBYTES(a0)
	SREG x5,5 * REGBYTES(a0)
	SREG x6,6 * REGBYTES(a0)
	SREG x7,7 * REGBYTES(a0)
	SREG x8,8 * REGBYTES(a0)
	SREG x9,9 * REGBYTES(a0)
	SREG x10,10 * REGBYTES(a0)
	SREG x11,11 * REGBYTES(a0)
	SREG x12,12 * REGBYTES(a0)
	SREG x13,13 * REGBYTES(a0)
	SREG x14,14 * REGBYTES(a0)
	SREG x15,15 * REGBYTES(a0)
	SREG x16,16 * REGBYTES(a0)
	SREG x17,17 * REGBYTES(a0)
	SREG x18,18 * REGBYTES(a0)
	SREG x19,19 * REGBYTES(a0)
	SREG x20,20 * REGBYTES(a0)
	SREG x21,21 * REGBYTES(a0)
	SREG x22,22 * REGBYTES(a0)
	SREG x23,23 * REGBYTES(a0)
	SREG x24,24 * REGBYTES(a0)
	SREG x25,25 * REGBYTES(a0)
	SREG x26,26 * REGBYTES(a0)
	SREG x27,27 * REGBYTES(a0)
	SREG x28,28 * REGBYTES(a0)
	SREG x29,29 * REGBYTES(a0)
	SREG x30,30 * REGBYTES(a0)
	SREG x31,31 * REGBYTES(a0)

	//Backup FRs
	SFREG f0,(0 + 32) * REGBYTES(a1)
	SFREG f1,(1 + 32) * REGBYTES(a1)
	SFREG f2,(2 + 32) * REGBYTES(a1)
	SFREG f3,(3 + 32) * REGBYTES(a1)
	SFREG f4,(4 + 32) * REGBYTES(a1)
	SFREG f5,(5 + 32) * REGBYTES(a1)
	SFREG f6,(6 + 32) * REGBYTES(a1)
	SFREG f7,(7 + 32) * REGBYTES(a1)
	SFREG f8,(8 + 32) * REGBYTES(a1)
	SFREG f9,(9 + 32) * REGBYTES(a1)
	SFREG f10,(10 + 32) * REGBYTES(a1)
	SFREG f11,(11 + 32) * REGBYTES(a1)
	SFREG f12,(12 + 32) * REGBYTES(a1)
	SFREG f13,(13 + 32) * REGBYTES(a1)
	SFREG f14,(14 + 32) * REGBYTES(a1)
	SFREG f15,(15 + 32) * REGBYTES(a1)
	SFREG f16,(16 + 32) * REGBYTES(a1)
	SFREG f17,(17 + 32) * REGBYTES(a1)
	SFREG f18,(18 + 32) * REGBYTES(a1)
	SFREG f19,(19 + 32) * REGBYTES(a1)
	SFREG f20,(20 + 32) * REGBYTES(a1)
	SFREG f21,(21 + 32) * REGBYTES(a1)
	SFREG f22,(22 + 32) * REGBYTES(a1)
	SFREG f23,(23 + 32) * REGBYTES(a1)
	SFREG f24,(24 + 32) * REGBYTES(a1)
	SFREG f25,(25 + 32) * REGBYTES(a1)
	SFREG f26,(26 + 32) * REGBYTES(a1)
	SFREG f27,(27 + 32) * REGBYTES(a1)
	SFREG f28,(28 + 32) * REGBYTES(a1)
	SFREG f29,(29 + 32) * REGBYTES(a1)
	SFREG f30,(30 + 32) * REGBYTES(a1)
	SFREG f31,(31 + 32) * REGBYTES(a1)
	ret